package controller

import (
	"fmt"
	"github.com/kataras/iris/v12"
	"github.com/spf13/cast"
	"wit-admin-go/system/app/dto"
	"wit-admin-go/system/app/service"
	"wit-admin-go/system/utils"
	log "wit-admin-go/system/zaplogger"
)

type LogController struct{}

var Log = new(LogController)

// CreateLog  添加日志
//
//	@Summary		添加日志
//	@Description	添加日志
//	@Tags			log
//	@Accept			x-www-form-urlencoded
//	@Produce		x-www-form-urlencoded
//	@Param			path			query	string	false	"请求路径/路由"
//	@Param			method			query	string	false	"请求方法"
//	@Param			ipAddr			query	string	false	"IP地址"
//	@Param			city			query	int		false	"地区"
//	@Param			os				query	bool	false	"操作系统"
//	@Param			userAgent		query	string	false	"用户信息"
//	@Param			params			query	string	false	"请求参数"
//	@Param			data			query	string	false	"数据"
//	@Param			groupName		query	string	false	"接口组"
//	@Param			name			query	string	false	"接口名"
//	@Param			duration		query	int		false	"耗时"
//	@Param			respStatusCode	query	int		false	"请求状态"
//	@Param			status			query	string	false	"状态"
//	@Param			memo			query	string	false	"备注"
//	@Success		200
//	@Router			/log/createLog [post]
func (us *LogController) CreateLog(ctx iris.Context) {
	res := new(dto.Result)
	logData := new(dto.Log)
	logData.Id = utils.GetUid()
	logData.CreateId = GetUser(ctx).Id
	err := ctx.ReadForm(logData)
	if err != nil {
		log.Log.Error(cast.ToString(err))
		res.Code = iris.StatusBadRequest
		res.Msg = cast.ToString(err)
		_ = ctx.JSON(res)
		return
	}
	err = service.UserService.PostCreateLog(*logData)
	if err == nil {
		res.Code = iris.StatusOK
		res.Msg = "创建成功"
	}
	_ = ctx.JSON(res)
}

// CreateLogSys 系统创建日志
func (us *LogController) CreateLogSys(logData *dto.Log) {
	logData.Id = utils.GetUid()
	err := service.UserService.PostCreateLog(*logData)
	if err != nil {
		log.Log.Error("日志写入失败")
	}
}

// GetLogList 获取日志
//
//	@Summary		获取日志
//	@Description	获取日志
//	@Tags			log
//	@Accept			x-www-form-urlencoded
//	@Produce		x-www-form-urlencoded
//	@Param			pageNum		query	int		false	"页码"
//	@Param			pageSize	query	int		false	"每页数"
//	@Param			userName	query	string	false	"用户名"
//	@Param			path		query	string	false	"请求路径/路由"
//	@Param			method		query	string	false	"请求方法"
//	@Param			ipAddr		query	string	false	"IP地址"
//	@Param			city		query	string	false	"地区"
//	@Param			os			query	string	false	"操作系统"
//	@Param			groupName	query	string	false	"接口组"
//	@Param			name		query	string	false	"接口名"
//	@Param			status		query	int		false	"状态-1 INFO,2 WARN,3 ERROR"
//	@Success		200
//	@Router			/log/getLogList [get]
//
// @Security ApiKeyAuth
func (us *LogController) GetLogList(ctx iris.Context) {
	page := new(dto.LogPage)
	res := new(dto.Result)
	if err := ctx.ReadForm(page); err != nil {
		fmt.Println(page, err)
		res.Code = iris.StatusBadRequest
		res.Msg = "参数错误"
		_ = ctx.JSON(res)
		return
	}

	user, total := service.UserService.GetLogList(page)
	res.Data = user
	res.Msg = "请求成功"
	res.Code = iris.StatusOK
	// Header返回总条数
	utils.SetTotal(ctx, total)
	_ = ctx.JSON(res)
}
